//package reactor3.subscriberContext;
//
//import reactor.core.publisher.Mono;
//import reactor.test.StepVerifier;
//
///**
// * @program: util
// * @description:
// * @author: zhouliangliang
// * @create: 2020-04-01 09:32ƒ
// **/
//public class SubscriberContextTest {
//
//
//    public void testSubscriberContext() {
//        String key = "message";
//        Mono<String> r = Mono.just("Hello").flatMap(s -> Mono.subscriberContext().map(ctx -> s + " " + ctx.get(key)))
//                .subscriberContext(ctx -> ctx.put(key, "World"));
//
//        StepVerifier.create(r).expectNext("Hello World").verifyComplete();
//    }
//
//    /**
//     * 由于这个例子的subscriberContext设置的太高了，不能作用在flatMap里头的Mono.subscriberContext()
//     */
//    public void testContextSequence() {
//        String key = "message";
//        Mono<String> r = Mono.just("Hello")
//                //NOTE 这个subscriberContext设置的太高了
//                .subscriberContext(ctx -> ctx.put(key, "World"))
//                .flatMap(s -> Mono.subscriberContext().map(ctx -> s + " " + ctx.getOrDefault(key, "Stranger")));
//
//        StepVerifier.create(r).expectNext("Hello Stranger").verifyComplete();
//    }
//
//    /**
//     * subscriberContext永远返回一个新的
//     */
//    public void testContextImmutable() {
//        String key = "message";
//        Mono<String> r = Mono.subscriberContext()
//                .map(ctx -> ctx.put(key, "Hello"))
//                //这里返回了一个新的，因此上面的设置失效了
//                .flatMap(ctx -> Mono.subscriberContext())
//                .map(ctx -> ctx.getOrDefault(key,"Default"));
//
//        StepVerifier.create(r)
//                .expectNext("Default").verifyComplete();
//    }
//
//
//    /**
//     * operator只会读取离它最近的一个context
//     */
//    public void testReadOrder() {
//        String key = "message";
//        Mono r = Mono.just("Hello").flatMap(s -> Mono.subscriberContext().map(cxt -> s + " " + cxt.get(key)))
//                .subscriberContext(cxt -> cxt.put(key, "Reactor"))
//                .subscriberContext(cxt -> cxt.put(key, "World"));
//
//        StepVerifier.create(r).expectNext("Hello Reactor").verifyComplete();
//    }
//
//    /**
//     * flatMap读取离它最近的context
//     */
//    public void testContextBetweenFlatMap() {
//        String key = "message";
//        Mono<String> r = Mono.just("Hello")
//                .flatMap(s -> Mono.subscriberContext().map(cxt -> s + " " + cxt.get(key)))
//                .subscriberContext(context -> context.put(key, "Reactor"))
//                .flatMap(s -> Mono.subscriberContext().map(context -> s + " " + context.get(key)))
//                .subscriberContext(context -> context.put(key, "World"));
//
//        StepVerifier.create(r).expectNext("Hello Reactor World").verifyComplete();
//    }
//
//    public void testContextInFlatMap() {
//        String key = "message";
//        Mono<String> r = Mono.just("Hello")
//                .flatMap(s -> Mono.subscriberContext().map(context -> s + " " + context.get(key)))
//                .flatMap(s -> Mono.subscriberContext().map(context -> s + " " + context.get(key))
//                        .subscriberContext(context -> context.put(key, "Reactor")))
//                .subscriberContext(context -> context.put(key,"World"));
//
//        StepVerifier.create(r).expectNext("Hello World Reactor").verifyComplete();
//
//    }
//
//
//    public static void main(String[] args) {
////        new SubscriberContextTest().testSubscriberContext();
////        new SubscriberContextTest().testContextSequence();
////        new SubscriberContextTest().testContextImmutable();
////        new SubscriberContextTest().testReadOrder();
//        new SubscriberContextTest().testContextBetweenFlatMap();
//    }
//
//}
